
import java.awt.Color;
import java.awt.Graphics;

/**
 * Class: Kamer
 * Maakt een Kamer voor in de Grid, heeft muren.
 * @author frankkie
 */
public class Kamer {

  int rij;
  int kolom;
  int x;
  int y;
  boolean compleet;
  boolean isMijn;
  Grid grid;
  Muur[] muren = new Muur[4];

  /**
   * Constructor Kamer
   * @param rij
   * @param kolom
   * @param grid
   */
  public Kamer(int rij, int kolom, Grid grid) {
    System.out.println("Kamer.Kamer(" + rij + "," + kolom + ",<Grid>)");
    this.rij = rij;
    this.kolom = kolom;
    this.grid = grid;
    this.compleet = false;

    final int LINKS = 2;
    final int RECHTS = 1;
    final int BOVEN = 3;
    final int ONDER = 0;

    muren[RECHTS] = new Muur(grid, this);
    muren[ONDER] = new Muur(grid, this);

    if (rij == 0) {
      muren[BOVEN] = new Muur(grid, this);
    } else {
      //van een andere kamer overnemen
      muren[BOVEN] = grid.kamers[rij - 1][kolom].getMuur(ONDER);
      muren[BOVEN].kamer2 = this;
    }

    if (kolom == 0) {
      //Linker muur
      muren[LINKS] = new Muur(grid, this);
    } else {
      //van een andere kamer overnemen
      muren[LINKS] = grid.kamers[rij][kolom - 1].getMuur(RECHTS);
      muren[LINKS].kamer2 = this;
    }
  }

  /**
   * Return-t de muur met dat nummer
   * @param index
   * @return Muur de muur met die index
   */
  public Muur getMuur(int index) {
    System.out.println("Kamer.getMuur(" + index + ")");
    //
    final int LINKS = 2;
    final int RECHTS = 1;
    final int BOVEN = 3;
    final int ONDER = 0;
    switch (index) {
      case LINKS: {
        System.out.println("Links");
        break;
      }
      case RECHTS: {
        System.out.println("Rechts");
        break;
      }
      case BOVEN: {
        System.out.println("Boven");
        break;
      }
      case ONDER: {
        System.out.println("Onder");
        break;
      }
      default: {
        System.out.println("i dont know...");
        break;
      }
    }
    //
    return muren[index];
  }

   /**
   * Teken deze kamer
   * @see Muur
   * @see Grid
   * @param g
   */
  public void tekenKamer(Graphics g) {
    System.out.println("Kamer.tekenKamer");
    x = kolom * grid.breedtekamer;
    y = rij * grid.hoogtekamer;
    //int grid.hoogtekamer = grid.getHeight() / grid.aantal;
    //int grid.breedtekamer = grid.getWidth() / grid.aantal;
    if (compleet) {
      System.out.println("Kamer.tekenKamer(): Kamer is Compleet");
      if (isMijn) {
        System.out.println("Kamer.tekenKamer(): Mijn Kamer");
        g.setColor(Spel.mijnKleur);
      } else {
        System.out.println("Kamer.tekenKamer(): Zijn Kamer");
        g.setColor(Spel.zijnKleur);
      }
    } else {
      g.setColor(Color.LIGHT_GRAY);
    }
    g.fillRect(x+grid.muurdiktev, y+grid.muurdikteh, grid.breedtekamer-grid.muurdiktev, grid.hoogtekamer-grid.muurdikteh);
    g.setColor(Color.BLACK);
    //g.drawRect(rij * grid.breedtekamer, kolom * grid.hoogtekamer, grid.breedtekamer, grid.hoogtekamer);

    final int LINKS = 2;
    final int RECHTS = 1;
    final int BOVEN = 3;
    final int ONDER = 0;


    muren[BOVEN].tekenMuur(x + grid.muurdiktev, y, grid.breedtekamer-grid.muurdiktev, grid.muurdikteh, g);
    muren[LINKS].tekenMuur(x, y+grid.muurdikteh, grid.muurdiktev, grid.hoogtekamer-grid.muurdikteh, g);

    if (kolom == (grid.aantal-1)){
     muren[RECHTS].tekenMuur(x+grid.breedtekamer, y+grid.muurdikteh, grid.muurdiktev, grid.hoogtekamer-grid.muurdikteh, g);
    }

    if (rij == (grid.aantal-1)){
      muren[ONDER].tekenMuur(x+grid.muurdiktev, y+grid.hoogtekamer, grid.breedtekamer-grid.muurdiktev, grid.muurdikteh, g);
    }
    /*
    //MUREN LATEN TEKENEN
    if (this.rij == 0) {
    if (this.kolom == 0) {
    // muren[LINKS].tekenMuur((rij * grid.breedtekamer), (kolom * grid.hoogtekamer) + (grid.muurdikteh), grid.muurdiktev, grid.hoogtekamer - (grid.muurdikteh * 2), g); //VERT LINKS
    // muren[RECHTS].tekenMuur((rij * grid.breedtekamer) + grid.breedtekamer - (grid.muurdiktev), (kolom * grid.hoogtekamer) + grid.muurdikteh, grid.muurdiktev, grid.hoogtekamer - (2 * grid.muurdikteh), g); //VERT RECHTS
    // muren[BOVEN].tekenMuur((rij * grid.breedtekamer) + (grid.muurdiktev), (kolom * grid.hoogtekamer), grid.breedtekamer - (grid.muurdiktev * 2), grid.muurdikteh, g); //HOR BOVEN
    // muren[ONDER].tekenMuur((rij * grid.breedtekamer) + (grid.muurdiktev), ((kolom + 1) * grid.hoogtekamer) - grid.muurdikteh, grid.breedtekamer - (grid.muurdiktev * 2), grid.muurdikteh, g); //HOR ONDER
    } else {
    //  muren[LINKS].tekenMuur((rij * grid.breedtekamer), (kolom * grid.hoogtekamer) + (grid.muurdikteh), grid.muurdiktev, grid.hoogtekamer - (grid.muurdikteh * 2), g); //VERT LINKS
    // muren[RECHTS].tekenMuur((rij * grid.breedtekamer) + grid.breedtekamer - (grid.muurdiktev), (kolom * grid.hoogtekamer), grid.muurdiktev, grid.hoogtekamer - (2 * grid.muurdikteh), g); //VERT RECHTS
    }
    } else {
    if (this.kolom == 0) {
    // muren[RECHTS].tekenMuur((rij * grid.breedtekamer) + grid.breedtekamer - (grid.muurdiktev * 2), (kolom * grid.hoogtekamer) + grid.muurdikteh, grid.muurdiktev, grid.hoogtekamer - (2 * grid.muurdikteh), g); //VERT RECHTS
    // muren[ONDER].tekenMuur((rij * grid.breedtekamer), ((kolom + 1) * grid.hoogtekamer) - grid.muurdikteh, grid.breedtekamer - (grid.muurdiktev * 2), grid.muurdikteh, g); //HOR ONDER
    // muren[BOVEN].tekenMuur((rij * grid.breedtekamer) + (grid.muurdiktev), (kolom * grid.hoogtekamer), grid.breedtekamer - (grid.muurdiktev * 2), grid.muurdikteh, g); //HOR BOVEN
    // muren[ONDER].tekenMuur((rij * grid.breedtekamer) + (grid.muurdiktev), ((kolom + 1) * grid.hoogtekamer) - grid.muurdikteh, grid.breedtekamer - (grid.muurdiktev * 2), grid.muurdikteh, g); //HOR ONDER
    } else {
    // muren[ONDER].tekenMuur((rij * grid.breedtekamer), ((kolom + 1) * grid.hoogtekamer) - grid.muurdikteh*2, grid.breedtekamer - (grid.muurdiktev * 2), grid.muurdikteh, g); //HOR ONDER
    // muren[RECHTS].tekenMuur((rij * grid.breedtekamer) + grid.breedtekamer - (grid.muurdiktev*2), (kolom * grid.hoogtekamer), grid.muurdiktev, grid.hoogtekamer - (2 * grid.muurdikteh), g); //VERT RECHTS
    }
    }
    //muren[RECHTS].tekenMuur((rij * grid.breedtekamer) + grid.breedtekamer - (grid.muurdiktev), (kolom * grid.hoogtekamer) + grid.muurdikteh, grid.muurdiktev, grid.hoogtekamer - (2 * grid.muurdikteh), g); //VERT RECHTS
    //muren[ONDER].tekenMuur((rij * grid.breedtekamer) + (grid.muurdiktev), ((kolom + 1) * grid.hoogtekamer) - grid.muurdikteh, grid.breedtekamer - (grid.muurdiktev * 2), grid.muurdikteh, g); //HOR ONDER
    //EINDE MUREN LATEN TEKENEN
     */
  }

  /**
   * Return-t of deze VANAF NU kamer compleet is
   * Een kamer is compleet als hij 4 geklikte muren heeft
   * Als een kamer al compleet was returnt ie false
   * @return boolean of deze kamer compleet is
   */
  public boolean checkCompleet() {
    System.out.println("Kamer.checkCompleet");
    if (compleet) {
      //klinkt vaag, maar ik return hier false;
      //want hij was al compleet
      return false;
    }
    for (int a = 0; a < muren.length; a++) {
      if (!muren[a].geklikt) {
        return false;
      }
    }
    this.compleet = true;
    this.isMijn = grid.spel.aandebeurt;
    return true;
  }

  /**
   * Return-t het nummer dat bij die muur hoort.
   * @param muur
   * @return index het muurnummer
   */
  public int getMuurnummer(Muur muur) {
    System.out.println("Kamer.getMuurnummer");
    for (int a = 0; a < muren.length; a++) {
      if (muren[a] != null && muren[a].equals(muur)) {
        return a;
      }
    }
    return -1;
  }
}
